﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AcadPos.Entity;
using System.Data;
using AcadPosApp.Utilidades;
using System.Collections;

namespace AcadPosApp.ControlarMatricula
{
    public partial class AtualizarFichaFinanceira : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                carregarEstados();
                ddlEstadoPesquisa.SelectedValue = "1";
                pnlPesquisa.Attributes.Add("onkeypress", "return clickButton(event,'" + btnConsultar.ClientID + "')");
            }
            else if (gvwFinanceiroAluno.Rows.Count > 0 && gvwFinanceiroAluno.Visible == true)
            {
                verificaSituacaoChecks();
            }
        }

        public void verificaSituacaoChecks()
        {
            ArrayList CheckBoxArray;
            if (ViewState["CheckBoxArray"] != null)
            {
                CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];
            }
            else
            {
                CheckBoxArray = new ArrayList();
            }

            int CheckBoxIndex;

            bool CheckAllWasChecked = false;

            CheckBox chkAll = (CheckBox)gvwFinanceiroAluno.HeaderRow.Cells[0].FindControl("CheckAll");

            string checkAllIndex = "CheckAll-" + gvwFinanceiroAluno.PageIndex;

            if (chkAll.Checked)
            {
                if (CheckBoxArray.IndexOf(checkAllIndex) == -1)
                {
                    CheckBoxArray.Add(checkAllIndex);
                }
            }
            else
            {
                if (CheckBoxArray.IndexOf(checkAllIndex) != -1)
                {
                    CheckBoxArray.Remove(checkAllIndex);
                    CheckAllWasChecked = true;
                }
            }

            for (int i = 0; i < gvwFinanceiroAluno.Rows.Count; i++)
            {
                if (gvwFinanceiroAluno.Rows[i].RowType == DataControlRowType.DataRow)
                {
                    CheckBox chk = (CheckBox)gvwFinanceiroAluno.Rows[i].Cells[0].FindControl("CheckBox1");
                    CheckBoxIndex = gvwFinanceiroAluno.PageSize * gvwFinanceiroAluno.PageIndex + (i + 1);
                    if (chk.Checked)
                    {
                        if (CheckBoxArray.IndexOf(CheckBoxIndex) == -1 && !CheckAllWasChecked)
                        {
                            CheckBoxArray.Add(CheckBoxIndex);
                        }
                    }
                    else
                    {
                        if (CheckBoxArray.IndexOf(CheckBoxIndex) != -1 || CheckAllWasChecked)
                        {
                            CheckBoxArray.Remove(CheckBoxIndex);
                        }
                    }
                }
            }
            ViewState["CheckBoxArray"] = CheckBoxArray;
        }

        private void persisteChecks()
        {
            ArrayList CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];
            string checkAllIndex = "chkAll-" + gvwFinanceiroAluno.PageIndex;
            if (CheckBoxArray.IndexOf(checkAllIndex) != -1)
            {
                CheckBox chkAll =
                (CheckBox)gvwFinanceiroAluno.HeaderRow.Cells[0].FindControl("chkAll");
                chkAll.Checked = true;
            }
            for (int i = 0; i < gvwFinanceiroAluno.Rows.Count; i++)
            {
                if (gvwFinanceiroAluno.Rows[i].RowType == DataControlRowType.DataRow)
                {
                    if (CheckBoxArray.IndexOf(checkAllIndex) != -1)
                    {
                        CheckBox chk =
                        (CheckBox)gvwFinanceiroAluno.Rows[i].Cells[0].FindControl("CheckBox1");
                        chk.Checked = true;
                        gvwFinanceiroAluno.Rows[i].Attributes.Add("style", "background-color:aqua");
                    }
                    else
                    {
                        int CheckBoxIndex = gvwFinanceiroAluno.PageSize * (gvwFinanceiroAluno.PageIndex) + (i + 1);
                        if (CheckBoxArray.IndexOf(CheckBoxIndex) != -1)
                        {
                            CheckBox chk =
                            (CheckBox)gvwFinanceiroAluno.Rows[i].Cells[0].FindControl("CheckBox1");
                            chk.Checked = true;
                        }
                    }
                }
            }
        }


        private void carregarEstados()
        {
            ddlEstadoPesquisa.DataSource = ControlClass.CNEstado.listaTodosEstados();
            ddlEstadoPesquisa.DataTextField = "ESTADO";
            ddlEstadoPesquisa.DataValueField = "ID_ESTADO";
            ddlEstadoPesquisa.DataBind();
        }

        protected void ddlEstadoPesquisa_SelectedIndexChanged(object sender, EventArgs e)
        {
            pnlMatriculasAluno.Visible = false;
            gvwFinanceiroAluno.Visible = false;
            pnlFichaFinanceira.Visible = false;
            pnlCadastro.Visible = false;
            gvwPesquisa.Visible = false;
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            gvwPesquisa.Visible = true;
            pnlMatriculasAluno.Visible = false;
            gvwFinanceiroAluno.Visible = false;
            pnlFichaFinanceira.Visible = false;
            pnlCadastro.Visible = false;
            carregarAlunos();
        }



        private void carregarAlunos()
        {
            string pNome = TxtPesquisa.Text;
            int idEstado = Convert.ToInt32(ddlEstadoPesquisa.SelectedValue);
            gvwPesquisa.DataSource = ControlClass.CNAluno.listarAlunosXEstado(pNome, idEstado);
            gvwPesquisa.DataBind();
            gvwPesquisa.SelectedIndex = -1;
        }
        protected void gvwPesquisa_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregaMatriculasAluno();
        }

        private void carregaMatriculasAluno()
        {
            pnlMatriculasAluno.Visible = true;
            Matricula matricula = new AcadPos.Entity.Matricula();
            matricula.MatriculaAluno = Convert.ToInt32(gvwPesquisa.DataKeys[gvwPesquisa.SelectedIndex]["MATRICULA"].ToString());
            gvwMatriculasAluno.DataSource = ControlClass.CNMatricula.listaMatriculasAluno(matricula);
            gvwMatriculasAluno.DataBind();
            gvwMatriculasAluno.SelectedIndex = -1;
        }

        protected void gvwPesquisa_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwPesquisa.PageIndex = e.NewPageIndex;
            carregarAlunos();
        }

        protected void gvwMatriculasAluno_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwMatriculasAluno.PageIndex = e.NewPageIndex;
            carregaMatriculasAluno();
        }

        protected void gvwMatriculasAluno_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregaFinanceiroMatricula();
            pnlAcoes.Visible = true;
            pnlFichaFinanceira.Visible = true;
            pnlPesquisa.Enabled = false;
        }

        private void carregaFinanceiroMatricula()
        {
            Matricula matricula = new Matricula();
            matricula.MatriculaAluno = Convert.ToInt32(gvwPesquisa.DataKeys[gvwPesquisa.SelectedIndex]["MATRICULA"].ToString());
            matricula.IdTurma = Convert.ToInt32(gvwMatriculasAluno.DataKeys[gvwMatriculasAluno.SelectedIndex]["ID_TURMA"].ToString());
            gvwFinanceiroAluno.Visible = true;
            gvwFinanceiroAluno.DataSource = ControlClass.CNMatricula.listaFinanceiroMatricula(matricula);
            gvwFinanceiroAluno.DataBind();
        }

        protected void gvwFinanceiroAluno_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwFinanceiroAluno.PageIndex = e.NewPageIndex;
            carregaFinanceiroMatricula(); 
            persisteChecks();
        }

        protected void gvwFinanceiroAluno_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (e.Row.Cells[6].Text.ToString() == "PAGO")
                {
                    e.Row.Cells[0].Enabled = false;
                }
            }
        }

        protected void btnConfirmar_Click(object sender, EventArgs e)
        {
            int qtdParcelasAlteradas = 0;
            string msg = string.Empty;
            try
            {
                alterarTamanhoPaginacaoGrid(100);

                Financeiro financeiro = new Financeiro();
                financeiro.DataVencimento = txtDtVencimento.Text != string.Empty ? Convert.ToDateTime(txtDtVencimento.Text) : DateTime.MinValue;
                financeiro.Valor = txtValor.Text != string.Empty ? Convert.ToDecimal(txtValor.Text) : 0;
                financeiro.Situacao = ddlSituacao.SelectedValue;
                
                //for(int i = 0, i = gvwFinanceiroAluno.PageIndex., i ++
                
                foreach (GridViewRow row in gvwFinanceiroAluno.Rows)
                {
                    CheckBox ckh = (CheckBox)row.FindControl("CheckBox1");
                    if (ckh.Checked)
                    {
                        financeiro.IdFinanceiro = Convert.ToInt32(gvwFinanceiroAluno.DataKeys[row.RowIndex]["ID_FINANCEIRO"].ToString());
                        if (ControlClass.CNMatricula.atualizarFinanceiro(financeiro))
                        {
                            qtdParcelasAlteradas++;
                            pnlCadastro.Visible = false;
                        }
                    }
                }                

                if (qtdParcelasAlteradas == 1)
                {
                    msg = "Parcela alteradas com sucesso!";
                }
                else if (qtdParcelasAlteradas > 1)
                {
                    msg = "Parcelas alteradas com sucesso!";
                }
                else
                {
                    msg = "Nenhuma parcela foi alterada! Selecione pelo menos uma parcela!";
                }
                alterarTamanhoPaginacaoGrid(10);
                carregaFinanceiroMatricula();
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, msg)), true);
            }
            catch
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, string.Empty)), true);
            }
        }

        private void alterarTamanhoPaginacaoGrid(int tamanho)
        {
            gvwFinanceiroAluno.PageSize = tamanho;
            gvwFinanceiroAluno.PageIndex = 0;
            //gvwFinanceiroAluno.DataBind();
            persisteChecks();
        }

        protected void btnAtualizar_Click(object sender, EventArgs e)
        {
            pnlCadastro.Visible = true;
            pnlParcelasRestantes.Visible = false;
            txtValor.Text = string.Empty;
            txtDtVencimento.Text = string.Empty;
            ddlSituacao.SelectedValue = "EM ABERTA";
        }

        protected void btnCancelarCadastro_Click(object sender, EventArgs e)
        {
            pnlCadastro.Visible = false;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            pnlCadastro.Visible = false;
            pnlFichaFinanceira.Visible = false;
            pnlPesquisa.Enabled = true;
            pnlParcelasRestantes.Visible = false;
            gvwMatriculasAluno.SelectedIndex = -1;
        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            pnlParcelasRestantes.Visible = false;
            int qtdParcelasExcluidas = 0;
            int qtdParcelasSelecionadas = 0;
            string msg = string.Empty;
            try
            {
                foreach (GridViewRow row in gvwFinanceiroAluno.Rows)
                {
                    CheckBox ckh = (CheckBox)row.FindControl("CheckBox1");
                    if (ckh.Checked)
                    {
                        qtdParcelasSelecionadas++;
                    }
                }
                Matricula matricula = new Matricula();
                matricula.IdTurma = Convert.ToInt32(gvwMatriculasAluno.DataKeys[gvwMatriculasAluno.SelectedIndex]["ID_TURMA"].ToString());
                matricula.MatriculaAluno = Convert.ToInt32(gvwPesquisa.DataKeys[gvwPesquisa.SelectedIndex]["MATRICULA"].ToString());

                int qtdLimiteExclusao = ControlClass.CNMatricula.retornaLimiteExclusaoParcelas(matricula);

                if (qtdParcelasSelecionadas <= qtdLimiteExclusao)
                {
                    Financeiro financeiro = new Financeiro();
                    foreach (GridViewRow row in gvwFinanceiroAluno.Rows)
                    {
                        CheckBox ckh = (CheckBox)row.FindControl("CheckBox1");
                        if (ckh.Checked)
                        {
                            financeiro.IdFinanceiro = Convert.ToInt32(gvwFinanceiroAluno.DataKeys[row.RowIndex]["ID_FINANCEIRO"].ToString());
                            if (ControlClass.CNMatricula.excluirParcelaFinanceiro(financeiro))
                            {
                                qtdParcelasExcluidas++;
                                pnlCadastro.Visible = false;
                            }
                        }
                    }
                    if (qtdParcelasExcluidas == 1)
                    {
                        msg = "Parcela excluída com sucesso!";
                    }
                    else if (qtdParcelasExcluidas > 1)
                    {
                        msg = "Parcelas excluídas com sucesso!";
                    }
                    else if (qtdParcelasExcluidas == 0)
                    {
                        msg = "Nenhuma parcela foi excluída!";
                    }
                    carregaFinanceiroMatricula();
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, msg)), true);
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "O número máximo de parcelas que podem ser excluídas: " + qtdLimiteExclusao + ". Tente novamente!")), true);
                }
            }
            catch
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, string.Empty)), true);
            }
        }

        protected void btnCancelarGerar_Click(object sender, EventArgs e)
        {
            pnlParcelasRestantes.Visible = false;
        }

        protected void btnConfirmarGerar_Click(object sender, EventArgs e)
        {
            try
            {
                Matricula matricula = new Matricula();
                matricula.IdTurma = Convert.ToInt32(gvwMatriculasAluno.DataKeys[gvwMatriculasAluno.SelectedIndex]["ID_TURMA"].ToString());
                matricula.MatriculaAluno = Convert.ToInt32(gvwPesquisa.DataKeys[gvwPesquisa.SelectedIndex]["MATRICULA"].ToString());
                matricula.PrimeiroVencimento = Convert.ToDateTime(txtData1Vencimento.Text);

                if (ControlClass.CNMatricula.geraParcelasRestantes(matricula))
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                    carregaFinanceiroMatricula();
                    pnlParcelasRestantes.Visible = false;
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Não foi possível realizar a operação. Por favor, verifique se todas as parcelas já foram geradas.")), true);
                }
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, ex.Message.ToString())), true);
            }
        }

        protected void btnIncluir_Click(object sender, EventArgs e)
        {
            pnlParcelasRestantes.Visible = true;
            txtData1Vencimento.Text = string.Empty;
        }

    }
}